package core

import (
	"fmt"
	"github.com/eatmoreapple/openwechat"
	"github.com/skip2/go-qrcode"
	"roc/wechat/global"
	"roc/wechat/init_serve"
	"roc/wechat/logic"
)

func RunServe() {
	// 初始化路由
	//r := init_serve.InitRouter()

	// 如果配置了redis，那么链接redis
	if global.CONFIG.Serve.UseRedis {
		//初始化redis
		init_serve.Redis()
	}

	// 初始化mysql数据库
	init_serve.Mysql()

	// 启动任务
	init_serve.InitTask()

	// 初始化AI模型
	init_serve.InitAi()

	//fmt.Println("port:", global.CONFIG.Serve.Port)
	//err := r.Run(fmt.Sprint("0.0.0.0:", global.CONFIG.Serve.Port)) // 监听并在 0.0.0.0:8080 上启动服务
	//if err != nil {
	//	panic(fmt.Errorf("服务启动失败，Err:%s", err))
	//} else {
	//	fmt.Println("Run:", fmt.Sprint("0.0.0.0:", global.CONFIG.Serve.Port))
	//}

	//moonshot.ShowModels()

	// 开始微信服务了
	runWechat()
}

func runWechat() {
	bot := openwechat.DefaultBot(openwechat.Desktop) // 桌面模式

	// 注册消息处理函数
	//bot.MessageHandler = func(msg *openwechat.Message) {
	//	if msg.IsText() && msg.Content == "ping" {
	//		msg.ReplyText("pong")
	//	}
	//}
	bot.MessageHandler = logic.Dispatch
	// 注册登陆二维码回调
	//bot.UUIDCallback = openwechat.PrintlnQrcodeUrl
	bot.UUIDCallback = ConsoleQrCode

	// 登陆
	//bot := openwechat.DefaultBot()
	reloadStorage := openwechat.NewFileHotReloadStorage("static/storage.json")
	defer reloadStorage.Close()
	err := bot.PushLogin(reloadStorage, openwechat.NewRetryLoginOption())
	if err != nil {
		fmt.Println(err)
		return
	}

	// 心跳回调函数
	// 默认的行为打印SyncCheckResponse
	bot.SyncCheckCallback = func(resp openwechat.SyncCheckResponse) {
		fmt.Printf("RetCode:%s  Selector:%s", resp.RetCode, resp.Selector)
	}
	//if err := bot.Login(); err != nil {
	//	fmt.Println(err)
	//	return
	//}

	// 获取登陆的用户
	self, err := bot.GetCurrentUser()
	if err != nil {
		fmt.Println(err)
		return
	}

	// 获取所有的好友
	friends, err := self.Friends()
	fmt.Println(friends, err)

	// 获取所有的群组
	groups, err := self.Groups()
	fmt.Println(groups, err)

	friendMap := make(map[string]*openwechat.Friend)
	fmt.Println("用户列表：")
	for _, friend := range friends {
		fmt.Println(friend.ID(), ";用户姓名：", friend.NickName)
		friendMap[friend.ID()] = friend
	}
	//630380460

	fmt.Println("=====================")

	fmt.Println("群列表：")
	for _, group := range groups {
		fmt.Println(group.AvatarID(), ";群姓名：", group.NickName)
	}

	if friend, ok := friendMap["630380460"]; ok {
		if friend.NickName == "鹏" {
			//self.SendTextToFriend(friend, "hello")
			//img, tmpErr := os.Open("/Users/roc/Downloads/gh_11614207e8e8_430.jpg")
			//if tmpErr !=nil{
			//	return
			//}
			//defer func() {
			//	_=img.Close()
			//}()
			//friend.SendImage(img)
			// 或者
			//self.SendImageToFriend(friend, img)

		} else {
			fmt.Println("不是该用户名称：", friend.NickName)
		}
	} else {

		fmt.Println("找不到该用户")
	}

	// 阻塞主goroutine, 直到发生异常或者用户主动退出
	bot.Block()

}

// ConsoleQrCode
// @Description: 控制台输出二维码
// @param uuid
func ConsoleQrCode(uuid string) {
	q, _ := qrcode.New("https://login.weixin.qq.com/l/"+uuid, qrcode.Low)
	//fmt.Println(q.ToString(true))

	fmt.Println(q.ToSmallString(true))
	//q.ToSmallString()
}
